#include "il2cpp-config.h"
#include "class-internals.h"
#include "Il2CppGenericContextHash.h"
#include "Il2CppGenericInstHash.h"
#include "Il2CppTypeHash.h"
#include "utils/HashUtils.h"
#include <cassert>

using il2cpp::utils::HashUtils;

namespace il2cpp
{
namespace metadata
{

size_t Il2CppGenericContextHash::operator() (const Il2CppGenericContext* context) const
{
	return Hash (context);
}

size_t Il2CppGenericContextHash::Hash (const Il2CppGenericContext* context)
{
	size_t classInstHash = 0;
	size_t methodInstHash = 0;

	if (context->class_inst)
		classInstHash = Il2CppGenericInstHash::Hash (context->class_inst);
	if (context->method_inst)
		methodInstHash = Il2CppGenericInstHash::Hash (context->method_inst);

	return HashUtils::Combine (classInstHash, methodInstHash);
}

} /* namespace vm */
} /* namespace il2cpp */
